package Offer50;

import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 *第一个只出现一次的字符
 * 在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。
 * @author 23737
 * @time 2021.10.17
 */
public class Test {
    public static void main(String[] args) {
        String s = "aabccdd";
        System.out.println(new Solution().firstUniqChar(s));
        System.out.println(new SolutionTwo().firstUniqChar(s));
    }
}

class Solution {
    public char firstUniqChar(String s) {
        Map<Character,Integer> map = new LinkedHashMap<>();
        for (int i = 0; i < s.length(); i++) {
            if(!map.containsKey(s.charAt(i))){
                map.put(s.charAt(i),1);
            }else {
                int num = map.get(s.charAt(i));
                map.put(s.charAt(i),++num);
            }
        }
        for(Character ch : map.keySet()){
            if(map.get(ch) == 1){
                return ch;
            }
        }
        return ' ';
    }
}

/**
 * 小技巧
 */
class SolutionTwo{
    public char firstUniqChar(String s) {
        char c;
        if (s.equals(' ')) {
            char s1 = ' ';
            return s1;
        }
        for (int i = 0; i < s.length(); i++) {
            c = s.charAt(i);
            if (s.indexOf(c) == i && s.indexOf(c, i + 1) == -1) {
                return c;
            }
        }
        return ' ';
    }
}
